package edu.pe.cayetano.dao; 

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.framework.DAOException;
import edu.pe.cayetano.model.to.OrdenServicioDetalleTO;
import edu.pe.cayetano.model.to.PlanTratamientoDetalleTO;
import edu.pe.cayetano.model.to.ServicioTO;

public class ServicioDAO extends BaseDAO{
	
	public ServicioDAO(Connection cnx) {
		super(cnx);
	}
	
	/**
	 * Metodo que devuelve el listado de servicios segun una especialidad
	 * */
	public ArrayList<ServicioTO> getServiciosxEspecialidadesxSedes(String especialidad) throws Exception{

		ServicioTO 				servicioTO	 = null;
		ArrayList<ServicioTO> 	lista		 = new ArrayList<ServicioTO>();
		PreparedStatement   		pstmt 		 = null;
		ResultSet 					rs 			 = null;
		String 						schema		 = Configuration.getSchemaDB();
	
		try{
				StringBuffer query  = new StringBuffer();
				query.append("SELECT SERVICIO_ID,NOMBRE FROM "+schema+"SERVICIO WHERE ESPECIALIDAD_ID=?");
				System.out.println("[SECCD][ServicioDAO][getServiciosxEspecialidadesxSedes]:query:<"+query.toString()+">");
				
				pstmt = getConnection().prepareStatement(query.toString());
				pstmt.setString(1,especialidad);
				rs=pstmt.executeQuery();
			
				servicioTO=new ServicioTO();
				servicioTO.setCodigo(0);
				servicioTO.setNombre("");
				lista.add(servicioTO);
			
				while(rs.next()){
					servicioTO=new ServicioTO();
					servicioTO.setCodigo(rs.getInt(1));
					servicioTO.setNombre(rs.getString(2));
					lista.add(servicioTO);
				}
			}catch(Exception e){
				System.out.println("[SECCD][ServicioDAO][getServiciosxEspecialidadesxSedes]:error generado por:"+e.getMessage());
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][getServiciosxEspecialidadesxSedes]:error generado por:"+e.getMessage());
					}
					try{rs.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][getServiciosxEspecialidadesxSedes]:error generado por:"+e.getMessage());
					}
				}catch(Exception e1){}
			}
		return lista;
	}
	
	/**
	 * Metodo que busca los planes de tratamiento de un servicio
	 * */
	public PlanTratamientoDetalleTO buscaServicioxEspecialidad(String especialidad) throws Exception{

		PlanTratamientoDetalleTO	detalleTO	 = null;
		PreparedStatement   		pstmt 		 = null;
		ResultSet 					rs 			 = null;
		String 						schema		 = Configuration.getSchemaDB();
	
		try{
				StringBuffer query  = new StringBuffer();
				query.append(" SELECT S.SERVICIO_ID,S.NOMBRE,E.NOMBRE,E.ESPECIALIDAD_ID ");
				query.append(" FROM "+schema+"SERVICIO S INNER JOIN "+schema+"ESPECIALIDAD E");
				query.append(" ON S.ESPECIALIDAD_ID=E.ESPECIALIDAD_ID");
				query.append(" WHERE S.SERVICIO_ID=?");
				System.out.println("[SECCD][ServicioDAO][buscaServicioxEspecialidad]:query:<"+query.toString()+">");
				pstmt = getConnection().prepareStatement(query.toString());
				pstmt.setString(1,especialidad);
				rs=pstmt.executeQuery();
				if(rs.next()){
					detalleTO=new PlanTratamientoDetalleTO();
					detalleTO.setCodigoServicio(rs.getInt(1));
					detalleTO.setNombreServicio(rs.getString(2));
					detalleTO.setNombreEspecialidad(rs.getString(3));
					detalleTO.setCodigoEspecialidad(rs.getInt(4));
				}
			}catch(Exception e){
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][buscaServicioxEspecialidad]:error generado por:"+e.getMessage());
					}
					try{rs.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][buscaServicioxEspecialidad]:error generado por:"+e.getMessage());
					}
				}catch(Exception e1){}
			}
		return detalleTO;
	}
	
	/**
	 * Metodo que devuelve el listado de servicios segun una especialidad
	 * */
	public ArrayList<ServicioTO> getServiciosxToxOS(String especialidad) throws Exception{

		ServicioTO 				servicioTO	 = null;
		ArrayList<ServicioTO> 	lista		 = new ArrayList<ServicioTO>();
		PreparedStatement   		pstmt 		 = null;
		ResultSet 					rs 			 = null;
		String 						schema		 = Configuration.getSchemaDB();
	
		try{
				StringBuffer query  = new StringBuffer();
				query.append("SELECT SERVICIO_ID,NOMBRE FROM "+schema+"SERVICIO WHERE ESPECIALIDAD_ID=? AND COD_TIPOSERVICIO NOT IN ('3')");
				System.out.println("[SECCD][ServicioDAO][getServiciosxToxOS]:query:<"+query.toString()+">");
				pstmt = getConnection().prepareStatement(query.toString());
				pstmt.setString(1,especialidad);
				rs=pstmt.executeQuery();
			
				servicioTO=new ServicioTO();
				servicioTO.setCodigo(0);
				servicioTO.setNombre("");
				lista.add(servicioTO);
			
				while(rs.next()){
					servicioTO=new ServicioTO();
					servicioTO.setCodigo(rs.getInt(1));
					servicioTO.setNombre(rs.getString(2));
					lista.add(servicioTO);
				}
			}catch(Exception e){
				System.out.println("[SECCD][ServicioDAO][getServiciosxToxOS]:error generado por:"+e.getMessage());
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][getServiciosxToxOS]:error generado por:"+e.getMessage());
					}
					try{rs.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][getServiciosxToxOS]:error generado por:"+e.getMessage());
					}
				}catch(Exception e1){}
			}
		return lista;
	}

	/**
	 * Metodo que devuelve el listado de servicios segun una especialidad
	 * */
	public OrdenServicioDetalleTO buscaDetalleCompletoServicio(String sede,String especialidad,String servicio) throws Exception{

		OrdenServicioDetalleTO		servicioTO	 = null;
		PreparedStatement   		pstmt 		 = null;
		ResultSet 					rs 			 = null;
		String 						schema		 = Configuration.getSchemaDB();
	
		try{
				StringBuffer query  = new StringBuffer();
				query.append(" SELECT SEDE_ID,NOMBRE_SEDE,ESPECIALIDAD_ID,NOMBRE_ESPEC,");
				query.append(" SERVICIO_ID,NOMBRE_SERV");
				query.append(" FROM "+schema+"V_DETALLE_SERVICIO ");
				query.append(" WHERE SEDE_ID=?");
				query.append(" AND ESPECIALIDAD_ID=?");
				query.append(" AND SERVICIO_ID=?");
				
				System.out.println("[SECCD][ServicioDAO][buscaDetalleCompletoServicio]:query:<"+query.toString()+">");				
				pstmt = getConnection().prepareStatement(query.toString());
				pstmt.setString(1,sede);
				pstmt.setString(2,especialidad);
				pstmt.setString(3,servicio);
				
				rs=pstmt.executeQuery();
				if(rs.next()){
					servicioTO=new OrdenServicioDetalleTO();
					servicioTO.setSedeID(rs.getInt(1));
					servicioTO.setSedeNombre(rs.getString(2));
					servicioTO.setEspecialidadID(rs.getInt(3));
					servicioTO.setEspecialidadNombre(rs.getString(4));
					servicioTO.setServicioID(rs.getInt(5));
					servicioTO.setServicioNombre(rs.getString(6));
				}
			}catch(Exception e){
				System.out.println("[SECCD][ServicioDAO][buscaDetalleCompletoServicio]:error generado por:"+e.getMessage());
				throw new DAOException(e.getMessage());
			}finally{
				try{
					try{pstmt.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][buscaDetalleCompletoServicio]:error generado por:"+e.getMessage());
					}
					try{rs.close();}catch(Exception e){
						System.out.println("[SECCD][ServicioDAO][buscaDetalleCompletoServicio]:error generado por:"+e.getMessage());
					}
				}catch(Exception e1){}
			}
		return servicioTO;
	}
}
